﻿using Nop.Core;
using Nop.Core.Domain.Tax;
using System.Collections.Generic;

namespace Nop.Services.Tax
{
    /// <summary>
    /// Surcharge service interface
    /// </summary>
    public partial interface ISurchargeService
    {
        /// <summary>
        /// Get all surcharge types
        /// </summary>
        /// <returns>Surcharge types</returns>
        IList<SurchargeType> GetAllSurchargeTypes();

        /// <summary>
        /// Deletes a surcharge
        /// </summary>
        /// <param name="surcharge">Surcharge</param>
        void DeleteSurcharge(Surcharge surcharge);

        /// <summary>
        /// Gets all surcharges
        /// </summary>
        /// <returns>Surcharges</returns>
        IPagedList<Surcharge> GetAllSurcharges(int pageIndex = 0, int pageSize = int.MaxValue);

        /// <summary>
        /// Gets all surcharges
        /// </summary>
        /// <param name="taxCategoryId">The tax category identifier</param>
        /// <param name="countryId">The country identifier</param>
        /// <param name="stateProvinceId">The state/province identifier</param>
        /// <param name="zip">The zip</param>
        /// <returns>Surcharges</returns>
        IList<Surcharge> GetAllSurcharges(int taxCategoryId, int? countryId,
            int? stateProvinceId, string zip);

        /// <summary>
        /// Gets a surcharge
        /// </summary>
        /// <param name="surchargeId">Surcharge identifier</param>
        /// <returns>Surcharge</returns>
        Surcharge GetSurchargeById(int surchargeId);

        /// <summary>
        /// Inserts a surcharge
        /// </summary>
        /// <param name="taxRate">Surcharge</param>
        void InsertSurcharge(Surcharge surcharge);

        /// <summary>
        /// Updates the surcharge
        /// </summary>
        /// <param name="surcharge">Surcharge</param>
        void UpdateSurcharge(Surcharge surcharge);
    }
}
